import java.sql.*;
import java.util.ArrayList;

public class AplikazioDatuBase {
	private static AplikazioDatuBase instantzia;
	private Connection Konexioa;
	private Integer jostailuaId;
	private Integer eskaeraZenbakia;
	
	public AplikazioDatuBase() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			Konexioa = DriverManager.getConnection("jdbc:mysql://localhost/euskaltoy", "software", "1111");
			System.out.println("konexioa egin da");
		} catch (SQLException anException) {
			while(anException !=null )
			{
				System.out.println("SQL Exception:  "+ anException.getMessage());
				anException.printStackTrace();
			}
			
		}
		 catch(java.lang.Exception anException)
		 {
			 anException.printStackTrace();
			 
		 }
	}
	
	public void finalize()
	{
		try
		{
			Konexioa.close();
		}
		catch (SQLException anException)
		{
			while(anException != null)
			{
			System.out.println("SQL Exception:  " + anException.getMessage());
			anException = anException.getNextException();
		}
	}
	catch (Exception anException)
	{ 
		anException.printStackTrace();
	}
}
	
	public int SartuEskaera(eska eskari) {
	
		eska eskaria = eskari;
	int kount = 0;	
	int kod=0;
	int i =0;
	int lag[];

	PreparedStatement insertSententzia = null;
	PreparedStatement insertSententzia2 = null;
	PreparedStatement selectSententzia = null;
	ResultSet resultSet;
	int jostailua[];
	try
	{//insert sententzia sortu
		selectSententzia=Konexioa.prepareStatement("SELECT MAX(id)from eskaera");
		resultSet= selectSententzia.executeQuery();
		if (resultSet.next())
		{
		kod = resultSet.getInt(1);
		}
		
		selectSententzia.close();
		
		insertSententzia=Konexioa.prepareStatement("INSERT INTO eskaera VALUES (null, ?,?,?,?,?)");
		insertSententzia.setInt(1, eskaria.prezioa());
		insertSententzia.setInt(2, eskaria.perid());
		insertSententzia.setInt(3, eskaria.baiezta());
		insertSententzia.setDate(4, (Date) eskaria.data());
		insertSententzia.setInt(5, eskaria.proz());
		//insert sententzia exekutatu
		kount= insertSententzia.executeUpdate();
		System.out.println(kount);
		insertSententzia.close();
		kod=kod+1;
		jostailua = new int[20];
		jostailua = eskaria.jostailua;
		//insertSententzia2 =Konexioa.prepareStatement("INSERT INTO eskaera_jostailuak VALUES(?,?,?)");
		AplikazioDatuBase datubase = AplikazioDatuBase.instance();
		lag= new int[2];
			while(jostailua[i]!=0){
				
				lag[0]=jostailua[i];
				i++;
				lag[1]=jostailua[i];
				datubase.eska_lag(kod,lag);
		
			//insertSententzia2.setInt(1,kod);
			//insertSententzia2.setInt(2, jostailua[i]);
			//insertSententzia2.setInt(3,jostailua[i+1]);
			
			i++;
			
			}
		//kount= insertSententzia2.executeUpdate();
		//System.out.println(kount);
		//insertSententzia2.close();
		
	}
	catch(SQLException anException)
	{
		while( anException !=null)
		{
			System.out.println(" SQL Exception: " + anException.getMessage());
			anException = anException.getNextException();
		}
	}
	catch(java.lang.Exception anException)
	{
		anException.printStackTrace();
	}
	finally
	{
		return kount;
	}
}
	
	public int eska_lag(int kodea, int[]josta){
		
		int i =0;
		int kount = 0;
		PreparedStatement insertSententzia2 = null;
		
		try{
		
		insertSententzia2 =Konexioa.prepareStatement("INSERT INTO eskaera_jostailuak VALUES(?,?,?)");
		
	
	
		insertSententzia2.setInt(1,kodea);
		insertSententzia2.setInt(2, josta[0]);
		insertSententzia2.setInt(3,josta[1]);
		
		
	kount= insertSententzia2.executeUpdate();
	System.out.println(kount);
	insertSententzia2.close();
	

	}
	catch(SQLException anException)
	{
		while( anException !=null)
		{
			System.out.println(" SQL Exception: " + anException.getMessage());
			anException = anException.getNextException();
		}
	}
	catch(java.lang.Exception anException)
	{
		anException.printStackTrace();
	}
	finally
	{
		return kount;
	}
}
	
	public int aldatu_per_datuak (String izena, String abizenak, String helbidea,String herria,String probintzia,int kp,int telefonoa, String erabilizena, String pasahitza)
	{
		PreparedStatement selectSententzia = null;
		ResultSet resultSet;
		PreparedStatement deleteSententzia = null;
		PreparedStatement deleteSententzia2 = null;
		PreparedStatement insertSententzia = null;
		PreparedStatement insertSententzia2 = null;
		int kodea = 0;
		int count;
		try 
		{
			
			//select sententzia hasieratu 
			selectSententzia = Konexioa.prepareStatement("SELECT * FROM erabiltzaileak WHERE erabiltzaileizena ='"+erabilizena+"'" );
		
			//select sententzia exekutatu
			resultSet= selectSententzia.executeQuery();
			//Result osagaia aztertzen
			
			if (resultSet.next())
			{
			kodea = resultSet.getInt(1);
			}
			System.out.println(kodea);
			selectSententzia.close();
			
			deleteSententzia = Konexioa.prepareStatement("DELETE  FROM pertsona where id ="+kodea);
			deleteSententzia.executeUpdate();
			deleteSententzia.close();
		
			deleteSententzia2 = Konexioa.prepareStatement("DELETE FROM erabiltzaileak where id ="+kodea);
			deleteSententzia2.executeUpdate();
			deleteSententzia2.close();
			
			insertSententzia=Konexioa.prepareStatement("INSERT INTO pertsona VALUES (?,?,?,?,?,?,?,?)");
			insertSententzia.setInt(1,kodea);
			insertSententzia.setString(2, izena);
			insertSententzia.setString(3, abizenak);
			insertSententzia.setString(4, helbidea);
			insertSententzia.setString(5, herria);
			insertSententzia.setString(6, probintzia);
			insertSententzia.setInt(7, kp);
			insertSententzia.setInt(8, telefonoa);
			//insert sententzia exekutatu
			insertSententzia.executeUpdate();
			
			insertSententzia2=Konexioa.prepareStatement("INSERT INTO erabiltzaileak VALUES (?,?,?)");
			insertSententzia2.setInt(1, kodea);
			insertSententzia2.setString(2, erabilizena);
			insertSententzia2.setString(3, pasahitza);
			count= insertSententzia2.executeUpdate();
			System.out.println(count);
			insertSententzia2.close();
		}
		catch(SQLException anException)
		{
			while( anException !=null)
			{
				System.out.println(" SQL Exception: " + anException.getMessage());
				anException = anException.getNextException();
			}
		}
		catch(java.lang.Exception anException)
		{
			anException.printStackTrace();
		}
		finally
		{
			return kodea;
		}
	}
	
		
	
	public int getpertsonaid(String izen, String pas){
	

		PreparedStatement selectSententzia = null;
		ResultSet resultSet;
		int kodea = 0;
		try 
		{
			
			//select sententzia hasieratu 
			selectSententzia = Konexioa.prepareStatement("SELECT id FROM erabiltzaileak WHERE   erabiltzaileizena = '"+izen+"'  AND pasahitza='"+pas+"'" );
		
			//select sententzia exekutatu
			resultSet= selectSententzia.executeQuery();
			//Result osagaia aztertzen
			
			if (resultSet.next())
			{
			kodea = resultSet.getInt(1);
			}
			selectSententzia.close();
			
		
		}
		catch(SQLException anException)
		{
			while( anException !=null)
			{
				System.out.println(" SQL Exception: " + anException.getMessage());
				anException = anException.getNextException();
			}
		}
		catch(java.lang.Exception anException)
		{
			anException.printStackTrace();
		}
		finally
		{
			return kodea;
		}
	}
	
	
	public boolean egiaztatu_erab(erabil era){

		PreparedStatement selectSententzia = null;
		ResultSet resultSet;
		String erab;
		String pasahitza;
		
		String pas = null;
		boolean boolearra = false;
		try 
		{
			erab = era.bueltatu_erab();
			pasahitza = era.bueltatu_pasa();
			//select sententzia hasieratu 
			selectSententzia = Konexioa.prepareStatement("SELECT * FROM erabiltzaileak WHERE erabiltzaileizena ='"+erab+"'");
		
			//select sententzia exekutatu
			resultSet= selectSententzia.executeQuery();
			//Result osagaia aztertzen
			
			if (resultSet.next())
			{
			pas = resultSet.getString(3);
			}
			selectSententzia.close();
			
			
			if (pasahitza.equalsIgnoreCase(pas)){
				boolearra = true;
			}
		}
		catch(SQLException anException)
		{
			while( anException !=null)
			{
				System.out.println(" SQL Exception: " + anException.getMessage());
				anException = anException.getNextException();
			}
		}
		catch(java.lang.Exception anException)
		{
			anException.printStackTrace();
		}
		finally
		{
			return boolearra;
		}
	}
	
	
	@SuppressWarnings({ "finally", "null" })
	public int SartuPertsonaErab (String izena, String abizenak, String helbidea,String herria,String probintzia,int kp,int telefonoa, String erabilizena, String pasahitza){
	
		int count = 0;
		int kod = 0;
		PreparedStatement insertSententzia = null;
		PreparedStatement insertSententzia2 = null;
		PreparedStatement selectSententzia = null;
		ResultSet resultSet;
		try
		{//insert sententzia sortu
			
			selectSententzia=Konexioa.prepareStatement("SELECT MAX(id)from pertsona");
			resultSet= selectSententzia.executeQuery();
			if (resultSet.next())
			{
			kod = resultSet.getInt(1);
			}
			if (kod !=0){
				kod = kod+1;	
			}
		
			selectSententzia.close();
			
		
			insertSententzia=Konexioa.prepareStatement("INSERT INTO pertsona VALUES (null, ?,?,?,?,?,?,?)");
			insertSententzia.setString(1, izena);
			insertSententzia.setString(2, abizenak);
			insertSententzia.setString(3, helbidea);
			insertSententzia.setString(4, herria);
			insertSententzia.setString(5, probintzia);
			insertSententzia.setInt(6, kp);
			insertSententzia.setInt(7, telefonoa);
			//insert sententzia exekutatu
			count= insertSententzia.executeUpdate();
			System.out.println(count);
			insertSententzia.close();
			
			System.out.println("Insert Iten Count: " + count);
			
			insertSententzia2=Konexioa.prepareStatement("INSERT INTO erabiltzaileak VALUES (?,?,?)");
			insertSententzia2.setInt(1, kod);
			insertSententzia2.setString(2, erabilizena);
			insertSententzia2.setString(3, pasahitza);
			count= insertSententzia2.executeUpdate();
			System.out.println(count);
			insertSententzia2.close();
		}
		catch(SQLException anException)
		{
			while( anException !=null)
			{
				System.out.println(" SQL Exception: " + anException.getMessage());
				anException = anException.getNextException();
			}
		}
		catch(java.lang.Exception anException)
		{
			anException.printStackTrace();
		}
		finally
		{
			return count;
		}
	}
	
	public int SartuJostailua(int prezioa) {
		
		int kount=0;
		PreparedStatement insertSententzia = null;
		try 
		{
			//insert sententzia hasieratu 
			insertSententzia = Konexioa.prepareStatement("INSERT INTO jostailuak VALUES(null, ?)");
			insertSententzia.setInt(1, prezioa);
			//insert sententzia exekutatu
			kount= insertSententzia.executeUpdate();
			insertSententzia.close();
			
			System.out.println("Insert Iten Count: " + kount);
		}
		catch(SQLException anException)
		{
			while( anException !=null)
			{
				System.out.println(" SQL Exception: " + anException.getMessage());
				anException = anException.getNextException();
			}
		}
		catch(java.lang.Exception anException)
		{
			anException.printStackTrace();
		}
		finally
		{
			return kount;
		}
	}

	public Integer getJostailua(int jostailuid) {
		
		int kount=0;
		PreparedStatement selectSententzia = null;
		ResultSet resultSet;
		
		try 
		{
			//select sententzia hasieratu 
			selectSententzia = Konexioa.prepareStatement("SELECT prezioa FROM jostailuak WHERE id ="+jostailuid);
		
			//select sententzia exekutatu
			resultSet= selectSententzia.executeQuery();
			//Result osagaia aztertzen
			
			if (resultSet.next())
			{
			kount = resultSet.getInt(1);
			}
			selectSententzia.close();
			
			System.out.println("Insert Iten Count: " + kount);
		}
		catch(SQLException anException)
		{
			while( anException !=null)
			{
				System.out.println(" SQL Exception: " + anException.getMessage());
				anException = anException.getNextException();
			}
		}
		catch(java.lang.Exception anException)
		{
			anException.printStackTrace();
		}
		finally
		{
			return kount;
		}
	}
	
	public eska getEskaera(int eskid) {
		
		int kount=0;
		PreparedStatement selectSententzia = null;
		ResultSet resultSet;
		int[] jostailuk = new int[20];
		int j=0;
		int i=7;
		int baieztapena=0;
		int prozezatua=0 ;
		int pertsid=0;
		int prezioa = 0;
		int id=0;
		eska eska1 = null;
		Date data = null;
		try 
		{
			//select sententzia hasieratu 
			selectSententzia = Konexioa.prepareStatement("SELECT * FROM eskaera as i NATURAL JOIN eskaera_jostailuak WHERE i.id ="+eskid);
		
			//select sententzia exekutatu
			resultSet= selectSententzia.executeQuery();
			//Result osagaia aztertzen
	
			while (resultSet.next())
			{
					//System.out.println(resultSet.getInt(9));
					id = resultSet.getInt(1);
					prezioa = resultSet.getInt(2);
					pertsid = resultSet.getInt(3);
					baieztapena = resultSet.getInt(4);
				    data = resultSet.getDate(5);
					prozezatua = resultSet.getInt(6);
					jostailuk[j]= resultSet.getInt(7);
					j++;
					jostailuk[j]= resultSet.getInt(8);

					j++;
					//i++;
					
			kount = resultSet.getInt(7);
			}
			
			eska1= new eska(id,prezioa,pertsid,baieztapena,data,prozezatua,jostailuk);
			selectSententzia.close();
			
			//System.out.println("Insert Iten Count: " + kount);
		}
		catch(SQLException anException)
		{
			while( anException !=null)
			{
				System.out.println(" SQL Exception: " + anException.getMessage());
				anException = anException.getNextException();
			}
		}
		catch(java.lang.Exception anException)
		{
			anException.printStackTrace();
		}
		finally
		{
			
			return eska1;
		}
	}
	public void  eskaeraEzabatu(int esk) {
		int kount=0;
		PreparedStatement deleteSententzia = null;
		PreparedStatement deleteSententzia2 = null;
		
		try {
			deleteSententzia = Konexioa.prepareStatement("DELETE FROM eskaera where id="+esk);
			deleteSententzia.executeUpdate();
			deleteSententzia.close();
		    deleteSententzia2 = Konexioa.prepareStatement("DELETE FROM eskaera_jostailuak where ideskaera="+esk);
			kount = deleteSententzia2.executeUpdate();
			deleteSententzia2.close();
			System.out.println("Insert Iten Count: " + kount);
	}
	catch(SQLException anException)
	{
		while( anException !=null)
		{
			System.out.println(" SQL Exception: " + anException.getMessage());
			anException = anException.getNextException();
		}
	}
	catch(java.lang.Exception anException)
	{
		anException.printStackTrace();
	}
		
	}
		
	public ArrayList<Jostailua> getJostailuak(){
		
		ArrayList<Jostailua> jostaula = new ArrayList<Jostailua>();
		PreparedStatement selectSententzia = null;
		ResultSet resultSet;
		Jostailua josta;
		int i=0;
		try 
		{
			//select sententzia hasieratu 
			selectSententzia = Konexioa.prepareStatement("SELECT * FROM jostailuak");
		
			//select sententzia exekutatu
			resultSet= selectSententzia.executeQuery();
			//Result osagaia aztertzen
			
			while (resultSet.next())
			{
				//System.out.println(resultSet.getInt(1));
			josta = new Jostailua( resultSet.getInt(1),resultSet.getInt(2));
			jostaula.add(i,josta);
			i++;
			}
			selectSententzia.close();
			
			
		}
		catch(SQLException anException)
		{
			while( anException !=null)
			{
				System.out.println(" SQL Exception: " + anException.getMessage());
				anException = anException.getNextException();
			}
		}
		catch(java.lang.Exception anException)
		{
			anException.printStackTrace();
		}
		finally
		{
			return jostaula;
		}
	}
	
	public ArrayList<eska> getEskaeraGuztiak(String erabilIzena, String pasahitza){
		eska eska2= null;
		eska eska3 = null;
		ArrayList<eska> eskak = new ArrayList<eska>();
		PreparedStatement selectSententzia = null;
		ResultSet resultSet;
		PreparedStatement SelectSententzia2 = null;
		PreparedStatement SelectSententzia3 = null;
		ResultSet resultSet2;
		ResultSet resultSet3;
		String erab;
		int kod = 0;
		int i=0;
		String pas = null;
		
		try 
		{
			int taula1[]= new int[10];
			erab = erabilIzena;
			pas= pasahitza;
			//select sententzia hasieratu 
			selectSententzia = Konexioa.prepareStatement("SELECT id FROM erabiltzaileak WHERE erabiltzaileizena ='"+erab+"'");
		
			//select sententzia exekutatu
			resultSet= selectSententzia.executeQuery();
			//Result osagaia aztertzen
			
			if (resultSet.next())
			{
			kod = resultSet.getInt(1);
			}
			selectSententzia.close();
			//System.out.println(kod);
			SelectSententzia2 = Konexioa.prepareStatement("SELECT DISTINCT e.id FROM eskaera AS e NATURAL JOIN eskaera_jostailuak as es WHERE e.pertsonaid="+kod);
			resultSet2= SelectSententzia2.executeQuery();
			//System.out.println(resultSet2.next());
			while (resultSet2.next())
			{
			taula1[i] = resultSet2.getInt(1);
			i= i+1;;
			}
			
			SelectSententzia2.close();
			AplikazioDatuBase datubase = AplikazioDatuBase.instance();
			if(i>=2){
			eska2=datubase.getEskaera(taula1[i-2]);
			eskak.add(0, eska2);
			eska3= datubase.getEskaera(taula1[i-1]);
			eskak.add(1,eska3);
			}
			if(i==1){
			eska2=datubase.getEskaera(taula1[i-1]);
			eskak.add(0, eska2);
			}
			}
			catch(SQLException anException)
			{
				while( anException !=null)
				{
					System.out.println(" SQL Exception: " + anException.getMessage());
					anException = anException.getNextException();
				}
			}
			catch(java.lang.Exception anException)
			{
				anException.printStackTrace();
			}
		return eskak;
				
			}
	public void jostailuaEzabatu(int zbk) {
		int kount=0;
		PreparedStatement deleteSententzia = null;
		
		try {
			deleteSententzia = Konexioa.prepareStatement("DELETE FROM jostailuak where id="+zbk);
			kount = deleteSententzia.executeUpdate();
			deleteSententzia.close();
			System.out.println("Insert Iten Count: " + kount);
	}
	catch(SQLException anException)
	{
		while( anException !=null)
		{
			System.out.println(" SQL Exception: " + anException.getMessage());
			anException = anException.getNextException();
		}
	}
	catch(java.lang.Exception anException)
	{
		anException.printStackTrace();
	}
		
	}
	public static AplikazioDatuBase instance()
	{
		if (instantzia == null)
			instantzia = new AplikazioDatuBase();
		return instantzia;
	}
}
